import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import './style.css'
import App from './App.vue'
import router from './router'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { useAuthStore } from './store/useAuthStore'
import { ElMessage } from 'element-plus'

// 创建应用实例
const app = createApp(App)

// 创建并使用Pinia状态管理
const pinia = createPinia()
app.use(pinia)

// 初始化auth store
const authStore = useAuthStore()

// 检查登录状态
const token = localStorage.getItem('token')
const userJson = localStorage.getItem('user')

console.log('应用初始化 - 检查认证状态:', { 
  hasToken: !!token, 
  hasUser: !!userJson 
})

// 如果本地存储有token和用户信息，但store中没有，则加载到store中
if (token && userJson && !authStore.user) {
  console.log('从localStorage加载用户信息到authStore')
  
  try {
    // 解析用户信息
    const userData = JSON.parse(userJson)
    
    // 设置到store
    authStore.$patch({
      token: token,
      user: userData
    })
    
    console.log('已加载用户信息到authStore')
  } catch (e) {
    console.error('解析用户信息失败', e)
    // 清除无效的存储
    localStorage.removeItem('user')
  }
}

// 如果有token，检查是否过期
if (token) {
  try {
    // 解析token
    const payload = JSON.parse(atob(token.split('.')[1]))
    const expirationTime = payload.exp * 1000
    
    console.log('Token有效期检查:', {
      exp: new Date(expirationTime).toLocaleString(),
      now: new Date().toLocaleString(),
      isExpired: Date.now() >= expirationTime
    })
    
    // 如果token已过期，清除登录状态
    if (Date.now() >= expirationTime) {
      console.warn('Token已过期，清除认证状态')
      
      // 清除store数据
      authStore.$reset()
      
      // 清除localStorage数据
      localStorage.removeItem('token')
      localStorage.removeItem('user')
      localStorage.removeItem('refresh_token')
      
      // 显示提示
      ElMessage.warning('登录已过期，请重新登录')
    }
  } catch (e) {
    console.error('Token解析失败', e)
    // 解析失败也清除token
    localStorage.removeItem('token')
  }
}

// 注册Element Plus图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}

// 使用插件
app.use(router)
app.use(ElementPlus)

// 确认authStore状态
console.log('应用初始化完成 - authStore状态:', {
  isAuthenticated: authStore.isAuthenticated,
  hasUser: !!authStore.user,
  token: !!authStore.token
})

// 挂载应用
app.mount('#app')
